在 DevOpsDay 的洗禮後,發現很多人已經開始試著將 AI 整進工作流程中做出 wakuwaku 的案例。但自己還停留在跟 Claude Debug 跟伸手要 code 的階段,於是乎決定來試著摸索將 AI 的應用整進 CICD 中。
一開始定義需求希望是可以有一個 AI Senior 工程師協助我做 Code Review,開始做調研有幾種
Azure DevOps Pipeline,Azure 內建,但是跟 Azure 不熟,所以跳過
Code Intelligence CI Spark vs Codium-ai/pr-agent,工程師的判斷標準很簡單,誰 github 追蹤數多用誰的。而且 Codium-ai/pr-agent 的 Doc 看下來寫得比較完整
Codium-ai 是美國創業公司開發的人工智能工具,旨在幫助開發人員更快地編寫測試並在部署前發現錯誤。 產品特點包含: AI 驅動的分析:分析源代碼、文檔字符串和註釋以生成有意義的測試。最有名的應該是他的一鍵生成單元測試。
我們先從大架構來看他是如何應用的,在思考接下來要怎麼實作。
CodiumAI PR-Agent is an open-source tool to help efficiently review and handle pull requests.
開源的,所以可以拿來玩
review and handle pull requests → 觸發的時機
從 example results 快速了解他可以做到的功能,包含
describe - 快速總結這次 PR 重點
review - 提醒 review 的重點
improve - 給予改進建議
generate_labels - 產出分數 label or 預期動作 → 未來應該可以整進 code review 過不過關或績效評估
其他更多應用:https://pr-agent-docs.codium.ai/tools/
接下來就是重點了,要如何使用呢?它分成 Installation Guide 跟 Usage Guide
我們一步步拆解,從 Installation Guide 可以得知他有自架(self-hosted) 跟官方付錢版本(PR-Agent Pro)。 小資族乖乖選擇自架。平台有 local 跟 github/gitlab/azure。因為公司在用 GitLab,所以會拿 GitLab 練手。
前置作業我們看到要有 OpenAI key 跟平台的 personal access token with the repo scope。OpenAI API 沒有 Free usage,看樣子要花錢錢 :<
先建立 repo main-feature (不用 group,因為 group access token 要 Premium license)
直接從 console 上建立 branch,並進行 code 改動,再建立 MR,得到 merge request url : https://gitlab.com/ooii8929/main-feature/-/merge_requests/2
建立 personal access token(權限給 api, read_registry)
來看看如何安裝,詳細參考官網。我們會先用 locally 的練練手,在 pip 跟 docker 間,熟悉的 Docker 最對味
Clone this repository
git clone https://github.com/Codium-ai/pr-agent.git
cd /pr-agent
我們要將一開始提到的 OpenAI key 和 gitlab user token 放進 secrets.toml 檔裡面,所以先從 template copy 一份下來
cp pr_agent/settings/.secrets_template.toml pr_agent/settings/.secrets.toml
chmod 600 pr_agent/settings/.secrets.toml
# Edit .secrets.toml file
在 pr_agent/settings/.secrets.toml 找到 gitlab 欄位
[gitlab]
# Gitlab personal access token
personal_access_token = "glpat-xxxx"
[openai]
key = "sk-xxxxx" # Acquire through https://platform.openai.com
pr_agent/settings/configuration.toml 要調整
[config]
# models
model="gpt-4-turbo-2024-04-09"
model_turbo="gpt-4o"
fallback_models=["gpt-4-0125-preview"]
# CLI
git_provider="gitlab" -> 調整成 gitlab
如果configuration.toml 沒調整,會遇到 provider error
File "/Users/alvinlin/Desktop/Personal/side-project/pr-agent/pr_agent/git_providers/__init__.py", line 62, in get_git_provider_with_context
raise ValueError(f"Failed to get git provider for {pr_url}") from e
ValueError: Failed to get git provider for https://gitlab.com/ooii8929/main-feature/-/merge_requests/2
運行看看
python -m venv venv
source ./venv/bin/activate
python3 -m pr_agent.cli --pr_url https://gitlab.com/ooii8929/main-feature/-/merge_requests/2 review
完成訊息
python3 -m pr_agent.cli --pr_url https://gitlab.com/ooii8929/main-feature/-/merge_requests/2 review
2024-08-01 21:49:44.797 | INFO | pr_agent.git_providers.git_provider:get_main_pr_language:266 - No languages detected
2024-08-01 21:49:49.945 | INFO | pr_agent.tools.pr_reviewer:run:107 - Reviewing PR: https://gitlab.com/ooii8929/main-feature/-/merge_requests/2 ...
2024-08-01 21:49:52.092 | INFO | pr_agent.algo.pr_processing:get_pr_diff:61 - PR main language: Other
2024-08-01 21:49:52.098 | INFO | pr_agent.algo.pr_processing:get_pr_diff:71 - Tokens: 2237, total tokens under limit: 32000, returning full diff.
2024-08-01 21:50:08.078 | INFO | pr_agent.tools.pr_reviewer:set_review_labels:408 - Setting review labels:
['Review effort [1-5]: 3']
如果再部署一次會直接更新原本的 commit
python3 -m pr_agent.cli --pr_url https://gitlab.com/ooii8929/main-feature/-/merge_requests/2 review
2024-08-01 21:56:50.387 | INFO | pr_agent.git_providers.git_provider:get_main_pr_language:266 - No languages detected
2024-08-01 21:56:55.313 | INFO | pr_agent.tools.pr_reviewer:run:107 - Reviewing PR: https://gitlab.com/ooii8929/main-feature/-/merge_requests/2 ...
2024-08-01 21:56:56.879 | INFO | pr_agent.algo.pr_processing:get_pr_diff:61 - PR main language: Other
2024-08-01 21:56:56.884 | INFO | pr_agent.algo.pr_processing:get_pr_diff:71 - Tokens: 2237, total tokens under limit: 32000, returning full diff.
2024-08-01 21:57:05.540 | INFO | pr_agent.tools.pr_reviewer:set_review_labels:411 - Review labels are already set:
['Review effort [1-5]: 3']
2024-08-01 21:57:07.327 | INFO | pr_agent.git_providers.git_provider:publish_persistent_comment_full:171 - Persistent mode - updating comment https://gitlab.com/ooii8929/main-feature/-/merge_requests/2#note_2026326099 to latest review message